package viewInterfaces;

import java.util.List;

import javax.swing.JPanel;

import modelInterfaces.IMetricSetup;
import pluginInterfaces.IMetric;
import pluginInterfaces.setup.MetricSetup;
import utils.weka.view.GenericObjectEditor;
import view.ViewMetricsPanel;
import controllerInterfaces.IControllerMetricsPanel;

/**
*
* Interface of {@link ViewMetricsPanel} controller class according to Abstract Factory design pattern.
*/
public interface IViewTestsPanel extends IViewPanel {

	/**
	 * Set the MVC++ Controller Class for this View.</br>
	 * ControllerMetricsPanel is manipulable through {@link IControllerMetricsPanel} interface
	 * @param	myController	MVC++ Controller
	 * @see	ControllerMetricsPanel
	 * @see IControllerMetricsPanel
	 */	
	public void SetController(IControllerMetricsPanel myController);
	
	
	/**
	 * Get panel of metrics configurations
	 * @return	JPanel
	 */
	public JPanel GetPanel();
	
	
	/**
	 * Show metric setup dialog
	 * @param goe	generic object editor 
	 */	
	public void renderDialogSetup(GenericObjectEditor goe);	
	
	
	/**
	 * Get all metrics configurations of current JList.</br>
	 * Each of the obtained {@link MetricSetup} are manipulable through its {@link IMetricSetup} interface.
	 * @return metrics configurations list 
	 * @see 	IMetricSetup
	 * @see		MetricSetup
	 */			
	public List<IMetricSetup> getMetricSetupList();
	
	
	/**
	 * Set the list of metric configurations in current JList</br>
	 * Each of the set {@link Metric} is manipulable through its {@link IMetric} interface.
	 * @param	metricList	list of {@link IMetric}
	 * @see 	IMetric
	 * @see		Metric
	 */			
	public void setMetricList(List<IMetric> metricList);
	
	
	/**
	 * Enables or disables all component of this panel, depending on the value of the parameter value.</br> 
	 * @param value	- If true, this component is enabled; otherwise this component is disabled  
	 */	
	public void setEnabledAll(boolean value);
	
	
	/**
	 * Start process for add a new recommender setup.
	 */
	public void StartToAddMetricSetup();
	

	
	/**
	 * Start process for edit a existing recommender setup.
	 * @param index index of recommender setup to edit
	 */
	public void StartToEditMetricSetup(int index);
	
	
	
	/**
	 * Start process for remove a existing recommender setup.
	 * @param index index of recommender setup to remove
	 */
	public void StartToRemoveMetricSetup(int index);

	
	/**
	 * Start process for copy a existing recommender setup.
	 * @param index index of recommender setup to copy
	 */
	public void StartToCopyMetricSetup(int index);
}
